package com.ld.admin.service.oa.work;

import java.text.SimpleDateFormat;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

import org.springframework.stereotype.Service;

import com.ld.admin.model.oa.work.SysUserRelationModel;
import com.ld.admin.model.oa.work.TodayTaskModel;
import com.ld.admin.model.system.SystemUser;
import com.ld.shieldsb.common.core.collections.ListUtils;
import com.ld.shieldsb.common.core.model.Result;
import com.ld.shieldsb.common.core.util.StringUtils;
import com.ld.shieldsb.common.web.BasicService;
import com.ld.shieldsb.common.web.StaticParams;
import com.ld.shieldsb.common.web.util.Web;
import com.ld.shieldsb.dao.model.PageNavigationBean;
import com.ld.shieldsb.dao.model.QueryModel;

/**
 * 
 * 今日任务服务类，@Service注解用于自动注入
 * 
 * @ClassName TodayTaskService
 * @author 黄升军
 * @date 2019年08月06日 10:26:33
 *
 */
@Service
public class TodayTaskService extends BasicService {

    // 用于子类覆盖，扩展doSearch方法中QueryModel的处理（标准queryModel处理完，查询进行前的处理）
    @Override
    protected QueryModel extendDealQuery(QueryModel queryModel) {
        return super.extendDealQuery(queryModel);
    }

    // 用于子类覆盖，扩展doSearch方法中PageNavigationBean的处理（查询完成后进行）
    @Override
    protected <T> PageNavigationBean<T> extendDealPageNavigationBean(PageNavigationBean<T> pageNavigationBean) {
        return super.extendDealPageNavigationBean(pageNavigationBean);
    }

    // 删除方法子类扩展（删除完成后进行）
    @Override
    protected <T> boolean extendRemove(Boolean flag, Class<T> classOfT, String key, Object value, Integer status, Long userId) {
        return flag;
    }

    // AddOrUpdate扩展（AddOrUpdate方法完成后进行）
    @Override
    protected <T> boolean extendAddOrUpdate(Boolean flag, T modelBean, boolean update, String key, Long userId) {
        return flag;
    }

    /**
     * 获取账号是正常的用户
     * 
     * @Title getUserList
     * @author 黄升军
     * @date 2019年8月12日 上午10:13:03
     * @return
     */
    public List<SystemUser> getUserList() {
        QueryModel queryModel = new QueryModel();
        queryModel.addEq("state", StaticParams.STATE_NORMAL);// 0 为正常的
        List<SystemUser> userList = BaseDAO.getList(SystemUser.class, queryModel);
        request.setAttribute("userList", userList);
        return userList;
    }

    /**
     * 获取有下级的上级
     * 
     * @Title permission
     * @author 黄升军
     * @date 2019年8月7日 下午1:45:36
     */
    public void permission() {
        String sql = "select superId from sys_user_relation GROUP BY superId";// 根据上级id分组查询上级id
        List<SysUserRelationModel> list = BaseDAO.getListBySql(SysUserRelationModel.class, sql);// 上级di
        request.setAttribute("superList", list);
    }

    /**
     * 根据sign获取我的任务下级任务所有任务
     * 
     * @Title getTaskBySign
     * @author 黄升军
     * @date 2019年8月8日 上午10:35:42
     * @param sign
     * @param queryModel
     */
    public void getTaskBySign(String sign, QueryModel queryModel) {
        if (StringUtils.isEmpty(sign)) {// 我的任务
            queryModel.addEq("createBy", Web.Util.getSessionUserId(request));// 创建人等于登录账户
        } else if ("lowLevel".equals(sign)) {// 下级任务
            QueryModel lowQueryModel = new QueryModel();
            lowQueryModel.addEq("superId", Web.Util.getSessionUserId(request));// 上级领导等于当前账户
            List<SysUserRelationModel> lowList = BaseDAO.getList(SysUserRelationModel.class, lowQueryModel);// 关系列表
            List<Long> userIdList = lowList.stream().map(e -> e.getUserId()).collect(Collectors.toList());// 下级用户id集合
            if (ListUtils.isNotEmpty(userIdList)) {
                queryModel.addInSet("createBy", userIdList.toArray());
            }
        } else if ("all".equals(sign)) {// 所有任务
        }
    }

    /**
     * 根据sign获取用户列表
     * 
     * @Title getUserListBySign
     * @author 黄升军
     * @date 2019年8月15日 上午11:15:23
     * @param sign
     */
    public void getUserListBySign(String sign) {
        if (StringUtils.isEmpty(sign)) {// 我的任务
        } else if ("lowLevel".equals(sign)) {// 下级任务
            String sql = "select id,userName from sys_user " + "where id in(select userId from sys_user_relation " + "where superId="
                    + Web.Util.getSessionUserId(request) + ")";
            List<Map<String, Object>> userList = BaseDAO.getListMapSql(sql);// 用户下级的用户
            request.setAttribute("userList", userList);

        } else if ("all".equals(sign)) {// 所有任务
            getUserList();
        }
    }

    /**
     * 添加或修改
     * 
     * @Title addOrUpdate
     * @author 黄升军
     * @date 2019年8月23日 下午1:43:37
     * @param model
     * @return
     */
    public Result addOrUpdate(TodayTaskModel model) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        String start = sdf.format(model.getStartDate());// 时间转为字符串
        String end = sdf.format(model.getPlannedCompletionDate());// 时间转为字符串
        if (start.compareTo(end) > 0) {// 比较
            return Web.Response.error("开始日期不能大于计划完成日期");
        }
        Result result = super.addOrUpdate(model, model.getId() != null);
        return Web.Response.result(result);
    }
}
